Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

580
Visualizações
¿Por qué "A = A + B - (B = A)" intercambia valores en C?

Para cambiar a números enteros, A y B, esto parece funcionar en C,

 A = A + B - ( B = A);

¿Por qué funciona esto? Y si esto funciona en todas las condiciones, ¿se puede usar para acortar cualquier otro algoritmo comúnmente implementado?

over 4 years ago · Santiago Trujillo
3 Respostas
Responde à pergunta

0

En realidad, invoca un comportamiento indefinido de acuerdo con los estándares.

C99 §6.5: “2. Entre el punto de secuencia anterior y el siguiente, el valor almacenado de un objeto se modificará como máximo una vez mediante la evaluación de una expresión. Además, el valor anterior se leerá solo para determinar el valor que se almacenará.”

over 4 years ago · Santiago Trujillo Relatório

0

No debe confiar en que un código como ese funcione porque se basa en el hecho de que se procesa de izquierda a derecha.

Cualquier implementación que no lo haga así va a hacer que falle.

Debe evitar escribir código que no funcione en todos los casos en todas las plataformas y que no sea independiente del compilador, o que se base en cosas que no estén documentadas o bien definidas.

Entonces, ¿por qué funciona si vas de izquierda a derecha? Supongamos que A = 1 y B = 3
A = A + B - ( B = A);
A = 1 + 3 - (1) = 3
La asignación de B ocurre donde dejé el (). La conclusión es que solo cuando se procesa de izquierda a derecha, la asignación de B a A ocurre más tarde.

Al procesar de derecha a izquierda el mismo ejemplo: A = A + B - ( B = A);
A = 1 + 1 - (1) = 1
Ahora la asignación de B está ocurriendo primero.

Nuevamente, no debe confiar en el código que no está claro para el lector sobre lo que está sucediendo y que depende del compilador, como es el caso aquí.

over 4 years ago · Santiago Trujillo Relatório

0

Esto es solo "más corto" que la forma estándar/obvia de hacerlo, en la cantidad de líneas/puntos y comas utilizados.

  • Introduce operaciones adicionales que podrían impedir la optimización por parte del compilador.
  • Empeora la legibilidad (como lo menciona DR)
  • Utiliza (ab) un comportamiento no estándar (como lo menciona Marion), lo que podría hacer que falle con algunos compiladores

Nunca debes usarlo.

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda